function changeSys(id,basepath){
	doAjax({
		url: basepath+'authority/changeSys.action',
		data: '_id=' + id,
		async: false,
		success: function(datas){
			window.parent.frames['topFrame'].location.reload();
			window.parent.frames['mainFrame'].location.reload();
			window.parent.frames['leftFrame'].location.reload();
			window.parent.frames['footerFram'].location.reload();
			window.parent.frames['leftcontrol'].location.reload();
		},
		error: function(){
			window.parent.frames['mainFrame'].location.href.reload();
		}
	});
	document.getElementById('vsSys').style.display = 'none';
}
//==========  消息处理 ===========//
/**
 * info 信息 alert
 */
function alertInfo(title,message){
	using('messager', function(){
		jQuery.messager.alert(title,message,'info');
	});
}
/**
 * warn 信息 alert
 */
function alertWarn(title,message){
	using('messager', function(){
		jQuery.messager.alert(title,message,'warning');
	});
}
/**
 * question 信息 alert
 */
function alertQuestion(title,message){
	using('messager', function(){
		jQuery.messager.alert(title,message,'question');
	});
}
/**
 * error 信息 alert
 */
function alertError(title,message){
	using('messager', function(){
		jQuery.messager.alert(title,message,'error');
	});
}
/**
 * info 信息 confirm
 */
function confirmInfo(title,message,callback){
	using('messager', function(){
		jQuery.messager.confirm(title, message,callback);
	});

}
/**
 * info 信息 prompt
 */
function promptInfo(title,message,callback){
	using('messager', function(){
		jQuery.messager.prompt(title, message,callback);
	});

}
//==========  消息处理  End ===========//
/**
 * 模拟windowopen 
 * width;height;left;top;modal;shadow;resizable;draggable;
 * @param {Object} href
 * @param {Object} title
 * @param {Object} options
 */
function vsOpenWindow(id,href,title,options){
	if(jQuery("#"+id).length > 0){
		return;
	}
	var optis;
	if(options){
		options = "{"+ options +"}";
		optis = eval("("+options +")");		
	} else {
		optis = {};
	}
	if(!title){
		title = '';
	}
	//
	var  $hdiv=jQuery("<div id=\""+id+"\"></div>").appendTo("body");
	jQuery.extend(optis, {
		title:title,
		minimizable : false,
		maximizable : false,
		href:href,
		onClose: function(){
			setTimeout(function() {
				$hdiv.window("destroy");
			},100);
		}
		});
	using('window', function(){
		$hdiv.window(optis);		
	});
}
/**
 * 模拟close window
 * width;height;left;top;modal;shadow;resizable;draggable;
 * @param {Object} href
 * @param {Object} title
 * @param {Object} options
 */
function vsCloseWindow(id){
	using('window', function(){
		parent.window.jQuery("#"+id).window("close");
	});	
}
//============================ 工具 ====================================//
/**
 * 用来注册<body>的onload事件
 * @param {} func
 */
function setBodyOnLoad(func){
	if(typeof func == "function"){
		jQuery(document).ready(func);
	}
}

/**
 * 去除左、右空格
 */
String.prototype.trim = function(){
	return jQuery.trim(this);
}

function null2blank(s){
	return s == null || s == "null"? "" : s;
}

/**
 * 将数组、Objcet对象按照key/value对进行序列化
 * eg.
 *   var params = { width:1680, height:1050 };
 *   param(params);
 *   
 *   结果： width=1680&height=1050
 *   
 * @param {Object} obj
 */
function param(obj){
	return jQuery.param(obj);
}


//========= 检测函数 =========//
/**
 * 检测对象obj是否是数组
 * @param {Object} obj
 * @return ture/false
 */
function isArray(obj){
	return jQuery.isArray(obj);
}

/**
 * 测试对象是否是函数
 * @param {Object} obj
 * @return true/false
 */
function isFunction(obj){
	return jQuery.isFunction(obj);
}

/**
 * 测试对象是否是空对象（不包含任何属性）
 * @param {Object} obj
 * 
 * eg.
 *    isEmptyObject({}) //true
 *    isEmptyObject({ foo: "bar" }) // false
 */
function isEmptyObject(obj){
	return jQuery.isEmptyObject(obj);
}
//========= 检测函数 End =========//


//=========== 数组操作 ===========//
/**
 * 确定给定值在数组中的位置,没有则返回-1
 * @param {Object} value
 * @param {Object} array
 * 
 * eg.
 *    var arr = [ 4, "Pete", 8, "John" ];
 *    inArray("John",arr)  //3
 */
function inArray(value, array){
	return jQuery.inArray(value, array);
}

/**
 * 合并两个数组到第一个数组上
 * @param {Object} first --第一个数组，会改变其中的元素
 * @param {Object} second --第二个数组，不会改变其中的元素
 * 
 * eg.
 *    merge([0,1,2], [2,3,4])
 *    结果： [0,1,2,2,3,4]
 */
function merge(first, second){
	return jQuery.merge(first, second);
}
//========== 数组操作 End =========//


//================= Ajax操作 ===============//
/**
 * Ajax请求，提交方式为POST
 * @param {Object} options --参数对象，
 * 属性包括 
 *      url         String         -- 发送请求的地址
 *      data        Object,string  --发送到服务器的数据。（可选）
 *      success     Function       --请求成功后的回调函数，参数：由服务器返回，并根据dataType参数进行处理后的数据。（可选）
 *      error       Function       --请求失败时调用事件。（可选）参数有以下三个：XMLHttpRequest 对象、错误信息、（可选）捕获的错误对象。
 *                                   如果发生了错误，错误信息（第二个参数）除了得到null之外，
 *                                   还可能是"timeout", "error", "notmodified" 和 "parsererror"。
 *      async       Boolean        --默认值:true, 请求方式，异步、同步（可选）
 *      dataType    String         --预期服务器返回的数据类型。（可选）
 * eg.
 *    doAjax({
 *       url:"test.jsp", -- 发送请求的地址
 *       data:"username=loafer&age=20", --发送到服务器的数据。（可以不写）
 *       success:function(msg){alert(msg);}, --请求成功后的回调函数，参数：由服务器返回，并根据dataType参数进行处理后的数据
 *       error:function(){alert("error!")},
 *       async:true, --请求方式，默认true，异步。（可以不写）
 *       dataType:xml --预期服务器返回的数据类型。（可以不写）
 *    });
 *    
 *    doAjax({
 *       url:"test.jsp",
 *       data:"username=loafer&age=30",
 *       success:function(msg)(alert(msg))
 *    })
 */
function doAjax(options){
	if(isEmptyObject(options))return;
	
	options.type = "POST";	
	jQuery.ajax(options);
}

/**
 * 
 * @param {Object} url
 * @param {Object} postParameter
 * @param {Object} isAsync
 * @param {Object} callbackFunc
 */
function executeRequest(url, postParameter, isAsync, callbackFunc){
	if(!url && url.trim()==""){
		alert("executeRequest 方法缺少请求地址。");
		return;
	}
	
	if(isAsync == null){
		isAsync = true;
	}
	
	if(callbackFunc && typeof callbackFunc != "function"){
		alert("executeRequest 方法第4个参数必须是一个函数对象。");
		return ;
	}
	
	var xmlhttp = window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP") : new XMLHttpRequest();
	xmlhttp.open("POST", url, isAsync);
	xmlhttp.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
	xmlhttp.send(postParameter);
	
	if(!isAsync){
       if(xmlhttp.readyState ==4 && xmlhttp.status == 200){
	   	   //有回调函数，则执行回调函数
           if(typeof callbackFunc == "function") callbackFunc(xmlhttp);
		   //无回调函数，则返回Ajax请求结果
           if(callbackFunc == null || trim(callbackFunc) == "") return xmlhttp.responseText;
       }          
    }else{
         xmlhttp.onreadystatechange = function(){
            if(xmlhttp.readyState ==4 && xmlhttp.status == 200){
                callbackFunc(xmlhttp.responseText); 
            }                 
         };    
    }
	
}
//================== Ajax操作 End ===============//

//============== JSON ===============//
/**
 * 将一个JSON字符串，转换成JSON对象
 * @param {Object} obj
 */
function parseJSON(str){
	return JSON.parse(str);
}

/**
 * 将Object转化成JSON 字符串
 */
function parseJSONString(obj){
    return JSON.stringify(obj);
}

/**
 * 判断给定的字符串是否符合JSON格式标准
 * @param {} str
 * @return {Boolean}
 */
function isJSONString(str){
	try{
		JSON.parse(str);
		return true;
	}catch(error){
		return false;
	}
}

//============== JSON End ===============//


//============== 页面风格设置 =============//
function setWebStyle(style){
    doAjax({
        url: "setWebStyle.action",
        data:"webStyle=" + style,
        success: function(){
            location.reload();
        },
        error: function(xmlHttpRequest, textStatus, errorThrown){
            alert("页面样式切换出错: " + textStatus);
        }
    });
}

function setWebLocale(locale){
    doAjax({
        url: "setWebStyle.action",
        data:"webLocale=" + locale,
        success: function(){
            location.reload();
        },
        error: function(xmlHttpRequest, textStatus, errorThrown){
            alert("页面语言切换出错: " + textStatus);
        }
    });
}


//=============== Cookie ==================//
function writeCookie(name, value) {  
    exp = new Date();  
    exp.setTime(exp.getTime() + (86400 * 1000 * 30)); 
    document.cookie = name + "=" + escape(value) + "; expires=" + exp.toGMTString() + "; path=/";  
} 

function readCookie(name) {  
    var search;  
    search = name + "=";  
    offset = document.cookie.indexOf(search);  
    if (offset != -1) {  
        offset += search.length;  
        end = document.cookie.indexOf(";", offset);  
        if (end == -1){ 
            end = document.cookie.length; 
        } 
        return unescape(document.cookie.substring(offset, end));  
    }else{ 
        return false; 
    } 
}

//单独校验表单元素,支持传入单独的id的字符串和id数组
function vsValidate(id){
	
	if(typeof id != "string"){
		var checkResult = true;
		for(var i=0; i<id.length; i++){
			checkResult = validByDomId(id[i]);
		}
		return checkResult;
	}
	return validByDomId(id);
}

function validByDomId(id){
	var $thi = jQuery("#"+id);
	$thi.validatebox();
	$thi.formDispatch();
	if ($thi[0].getAttribute("type").toLowerCase() == "checkbox") {
        var $boxDiv = $("#" + $thi.attr("name"));
        if ($boxDiv.hasClass("validatebox-invalid")) {
            return false;
        }
    }

    if ($thi[0].getAttribute("type").toLowerCase() == "select-multiple") {
        if ($thi.parent().hasClass("validatebox-invalid")) {
            return false;
        }
    }

    if ($thi[0].getAttribute("type").toLowerCase() == "select-one") {
        if ($thi.attr("selectType")) {
            var $comboDiv = $thi.parent();
            var $combotext = $comboDiv.find(".combobox-text");
            if ($combotext.hasClass("validatebox-invalid")) {
                return false;
            }
        } else {
            if ($thi.parent().hasClass("validatebox-invalid")) {
                return false;
            }
        }
        if ($thi.parent().hasClass("validatebox-invalid")) {
            return false;
        }
    }

    if ($thi.hasClass("validatebox-invalid")) {
        return false;
    }
	 return true;
}

